]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspaceAnimation: Stop depending on shellwm
authorAlexander Mikhaylenko <exalm7659@gmail.com>
Tue, 21 Jan 2020 13:09:56 +0000 (18:09 +0500)
committerMarge Bot <marge-bot@gnome.org>
Tue, 2 Feb 2021 19:35:07 +0000 (19:35 +0000)
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1326>

js/ui/windowManager.js
js/ui/workspaceAnimation.js

index 34c731428f4ea7bc386faee4cc847d692c2dcc73..2d2d2e32f14fafac63af60beeb553cc1736a7b5f 100644 (file)
@@ -960,6 +960,11 @@ var WindowManager = class {
 
         this._workspaceAnimation =
             new WorkspaceAnimation.WorkspaceAnimationController();
+
+        this._shellwm.connect('kill-switch-workspace', () => {
+            this._workspaceAnimation.cancelSwitchAnimation();
+            this._switchWorkspaceDone();
+        });
     }
 
     async _startX11Services(task, cancellable) {
@@ -1618,7 +1623,20 @@ var WindowManager = class {
             return;
         }
 
-        this._workspaceAnimation.animateSwitch(shellwm, from, to, direction);
+        this._switchInProgress = true;
+
+        this._workspaceAnimation.animateSwitch(from, to, direction, () => {
+            this._shellwm.completed_switch_workspace();
+            this._switchInProgress = false;
+        });
+    }
+
+    _switchWorkspaceDone() {
+        if (!this._switchInProgress)
+            return;
+
+        this._shellwm.completed_switch_workspace();
+        this._switchInProgress = false;
     }
 
     _showTilePreview(shellwm, window, tileRect, monitorIndex) {
index 9d7a98905d0e9f589598dac6870526436500aff3..17002667e0cd8b115677edb983f4760c6f9a559e 100644 (file)
@@ -10,18 +10,8 @@ const WINDOW_ANIMATION_TIME = 250;
 
 var WorkspaceAnimationController = class {
     constructor() {
-        this._shellwm = global.window_manager;
         this._movingWindow = null;
-
         this._switchData = null;
-        this._shellwm.connect('kill-switch-workspace', shellwm => {
-            if (this._switchData) {
-                if (this._switchData.inProgress)
-                    this._switchWorkspaceDone(shellwm);
-                else if (!this._switchData.gestureActivated)
-                    this._finishWorkspaceSwitch(this._switchData);
-            }
-        });
 
         global.display.connect('restacked', this._syncStacking.bind(this));
 
@@ -225,7 +215,7 @@ var WorkspaceAnimationController = class {
         this.movingWindow = null;
     }
 
-    animateSwitch(shellwm, from, to, direction) {
+    animateSwitch(from, to, direction, onComplete) {
         this._prepareWorkspaceSwitch(from, to, direction);
         this._switchData.inProgress = true;
 
@@ -247,15 +237,13 @@ var WorkspaceAnimationController = class {
             y: yDest,
             duration: WINDOW_ANIMATION_TIME,
             mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
-            onComplete: () => this._switchWorkspaceDone(shellwm),
+            onComplete: () => {
+                this._finishWorkspaceSwitch(this._switchData);
+                onComplete();
+            },
         });
     }
 
-    _switchWorkspaceDone(shellwm) {
-        this._finishWorkspaceSwitch(this._switchData);
-        shellwm.completed_switch_workspace();
-    }
-
     _directionForProgress(progress) {
         if (global.workspace_manager.layout_rows === -1) {
             return progress > 0
@@ -412,6 +400,16 @@ var WorkspaceAnimationController = class {
         return this._switchData !== null && this._switchData.gestureActivated;
     }
 
+    cancelSwitchAnimation() {
+        if (!this._switchData)
+            return;
+
+        if (this._switchData.gestureActivated)
+            return;
+
+        this._finishWorkspaceSwitch(this._switchData);
+    }
+
     set movingWindow(movingWindow) {
         this._movingWindow = movingWindow;
     }